<template>
  <div class="buy-money-box">
    <!-- 电商数据看板-下单金额分布占比 -->
    <div :class="config.className" id="echarts-pie" ref='echartsPie'></div>
  </div>
</template>

<script>
/**
 *       orderAmount: { // 下单金额分布占比
 *         config: {
 *           color: ['#4168e7', '#14d8cb', '#1ccf79', '#ffd83b', '#f65570', '#9850fc']
 *         },
 *         dataList: [
 *           { value: 422, name: '360元以上' },
 *           { value: 335, name: '315-360元' },
 *           { value: 310, name: '270-315元' },
 *           { value: 265, name: '220-270元' },
 *           { value: 215, name: '180-220元' },
 *           { value: 152, name: '0-180元' }
 *         ]
 *       },
 */
import 'echarts/map/js/china.js'

export default {
  name: 'EchartsPie',
  props: {
    documentId: {
      type: String,
      default: () => ''
    },
    config: {
      type: Object,
      default: () => {}
    },
    dataList: {
      type: Array,
      default: () => []
    },
    loading: {
      type: Boolean,
      default: () => false
    }
  },
  data () {
    return {
      levelList: null
    }
  },
  watch: {
    $route () {
      this.handlerBuyMoney()// 电商数据看板下单金额分布占比开始
    },
    dataList (val) {
      this.handlerBuyMoney()// 电商数据看板下单金额分布占比开始
    },
    config: {
      deep: true,
      handler (newVal, oldVal) {
        this.handlerBuyMoney()// 电商数据看板下单金额分布占比开始
      }
    }
  },
  mounted () {
    this.$nextTick(_ => {
      setTimeout(() => {
        this.handlerBuyMoney()// 电商数据看板下单金额分布占比开始
      }, 1000)
    })
  },
  created () {
  },
  methods: {
    // 电商数据看板下单金额分布占比开始
    handlerBuyMoney () {
      const config = this.config
      // const buyMoney = this.$echarts.init(document.getElementById('echarts-pie'))
      const buyMoney = this.$echarts.init(document.getElementsByClassName(config.className)[0])
      const dataList = [...this.dataList]
      buyMoney.setOption({
        title: {
          text: '',
          left: 'left',
          top: 20,
          textStyle: { color: '#333333' }
        },
        tooltip: {
          extraCssText: 'box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);',
          trigger: 'item',
          textStyle: {
            color: '#333' // 设置文字颜色
          },
          borderColor: '#2D8CF0', // 设置边框颜色
          backgroundColor: '#fff', // 设置背景颜色
          // formatter: '{b} : {c} ({d}%)'
          formatter: function (params, ticket, callback) {
            // console.log(params)
            // params.forEach((item) => {
            return `<div>
              <span class="fl" style="display:inline-block;margin-top:6px;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color:${params.color}"></span>
              <span class="fl"> ${params.name}  </span>
              <p style='display: flex;justify-content: space-between;'>
              <span style="padding-left:18px;margin-right: 40px;"> 客户总数 </span> ${params.value} </p>
              <p style='display: flex;justify-content: space-between;'>
              <span style="padding-left:18px;margin-right: 45px;"> 占比 </span>${params.percent}%</p>
            </div>`
          }
        },
        legend: {
          icon: 'circle', // 按钮设置 circle为圆形
          // 图例的类型，默认为plain，可选plain（普通） | scroll（可滚动翻页图例）
          type: 'plain',
          width: '10%',
          // 图例的布局朝向，默认为horizontal，可选为 horizontal | vertical
          orient: 'vertical',
          // 图例每项间隔
          itemGap: 10,
          // 水平安放位置，默认为左侧，可选为：'center' | 'left' | 'right' | {number}（x坐标，单位px））
          x: 'left',
          // 垂直安放位置，默认为顶端，可选为：'top' | 'center' | 'bottom' | {number}（y坐标，单位px））
          y: '10px',
          // 图例数据
          // data:name,
          // 图例文字的样式
          textStyle: {
            // 颜色
            color: 'rgba(51, 51, 51, 1)',
            // 字号
            fontSize: 12
          }
          // 图例组件高度
          // height: 666
        },
        color: config.color,
        series: [
          {
            type: 'pie',
            // 扇形不显示
            stillShowZeroSum: false,
            // 扇形对应的标签不显示
            label: { color: 'rgba(51, 51, 51, 1)' },
            labelLine: {
              // lineStyle: { color: 'rgba(255, 255, 255, 0.3)' },
              smooth: 0.2,
              length: 10,
              length2: 20
            },
            minAngle: 10, // 设置扇区最小角度
            avoidLabelOverlap: true,
            data: dataList,
            center: ['65%', '50%'], // 饼图的中心（圆心）坐标，数组的第一项是横坐标，第二项是纵坐标。支持设置成百分比，设置成百分比时第一项是相对于容器宽度，第二项是相对于容器高度。
            // 半径 要写在series里才有效
            radius: config.radius // 值为数组时为空心
            // 圆环
            // radius: ['30%', '60%'],
            // 玫瑰图
            // roseType: 'area',
          }
        ]
      })
      window.addEventListener('resize', function () {
        buyMoney.resize() // myChart 是实例对象
      })
    }
  }
}
</script>
<style scoped lang="scss">
#echarts-pie {
  width: 100%;
  height: 400px;
}
</style>

/*
mytextStyle={
color:"#333",               //文字颜色
fontStyle:"normal",         //italic斜体  oblique倾斜
fontWeight:"normal",        //文字粗细bold   bolder   lighter  100 | 200 | 300 | 400...
fontFamily:"sans-serif",    //字体系列
fontSize:18,                  //字体大小
};
mylineStyle={
color:"#333",               //颜色，'rgb(128, 128, 128)'，'rgba(128, 128, 128, 0.5)'，支持线性渐变，径向渐变，纹理填充
shadowColor:"red",          //阴影颜色
shadowOffsetX:0,            //阴影水平方向上的偏移距离。
shadowOffsetY:0,            //阴影垂直方向上的偏移距离
shadowBlur:10,              //图形阴影的模糊大小。
type:"solid",               //坐标轴线线的类型，solid，dashed，dotted
width:1,                    //坐标轴线线宽
opacity:1,                  //图形透明度。支持从 0 到 1 的数字，为 0 时不绘制该图形
};
myareaStyle={
color:['rgba(250,250,250,0.3)','rgba(200,200,200,0.3)'],//分隔区域颜色。分隔区域会按数组中颜色的顺序依次循环设置颜色。默认是一个深浅的间隔色。
shadowColor:"red",          //阴影颜色
shadowOffsetX:0,            //阴影水平方向上的偏移距离。
shadowOffsetY:0,            //阴影垂直方向上的偏移距离
shadowBlur:10,              //图形阴影的模糊大小。
opacity:1,                  //图形透明度。支持从 0 到 1 的数字，为 0 时不绘制该图形
};
myitemStyle={
color:"red",                 //颜色
borderColor:"#000",         //边框颜色
borderWidth:0,               //柱条的描边宽度，默认不描边。
borderType:"solid",         //柱条的描边类型，默认为实线，支持 'dashed', 'dotted'。
barBorderRadius:0,          //柱形边框圆角半径，单位px，支持传入数组分别指定柱形4个圆角半径。
shadowBlur:10,              //图形阴影的模糊大小。
shadowColor:"#000",         //阴影颜色
shadowOffsetX:0,            //阴影水平方向上的偏移距离。
shadowOffsetY:0,            //阴影垂直方向上的偏移距离。
opacity:1,                   //图形透明度。支持从 0 到 1 的数字，为 0 时不绘制该图形。
};
mylabel={
show:false,                  //是否显示标签。
position:"inside",          //标签的位置。// 绝对的像素值[10, 10],// 相对的百分比['50%', '50%'].'top','left','right','bottom','inside','insideLeft','insideRight','insideTop','insideBottom','insideTopLeft','insideBottomLeft','insideTopRight','insideBottomRight'
offset:[30, 40],             //是否对文字进行偏移。默认不偏移。例如：[30, 40] 表示文字在横向上偏移 30，纵向上偏移 40。
formatter:'{b}: {c}',       //标签内容格式器。模板变量有 {a}、{b}、{c}，分别表示系列名，数据名，数据值。
textStyle:mytextStyle
};
mypoint={
symbol:"pin",               //图形 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'
symbolSize:50,              //标记的大小，可以设置成诸如 10 这样单一的数字，也可以用数组分开表示宽和高，例如 [20, 10] 表示标记宽为20，高为10。
symbolRotate:0,             //标记的旋转角度。注意在 markLine 中当 symbol 为 'arrow' 时会忽略 symbolRotate 强制设置为切线的角度。
symbolOffset:[0,0],         //标记相对于原本位置的偏移。默认情况下，标记会居中置放在数据对应的位置
silent:false,               //图形是否不响应和触发鼠标事件，默认为 false，即响应和触发鼠标事件。
label:{
normal:mylabel,
emphasis:mylabel
},
itemStyle:{
normal:myitemStyle,
emphasis:myitemStyle
}
};
myline={
symbol:["pin","circle"],    //图形 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'
symbolSize:50,              //标记的大小，可以设置成诸如 10 这样单一的数字，也可以用数组分开表示宽和高，例如 [20, 10] 表示标记宽为20，高为10。
precision:2,                //标线数值的精度，在显示平均值线的时候有用。
silent:false,               //图形是否不响应和触发鼠标事件，默认为 false，即响应和触发鼠标事件。
label:{
normal:mylabel,
emphasis:mylabel
},
lineStyle:{
normal:mylineStyle,
emphasis:mylineStyle
}
};
myarea={
silent:false,               //图形是否不响应和触发鼠标事件，默认为 false，即响应和触发鼠标事件。
label:{
normal:mylabel,
emphasis:mylabel
},
itemStyle:{
normal:myitemStyle,
emphasis:myitemStyle
}
};
series=[
{
type:"pie",                 //饼图
zlevel:0,                   //柱状图所有图形的 zlevel 值。
z:2,                         //柱状图组件的所有图形的z值。控制图形的前后顺序。z值小的图形会被z值大的图形覆盖。
center:['50%', '50%'],      //饼图的中心（圆心）坐标，数组的第一项是横坐标，第二项是纵坐标。支持设置成百分比，设置成百分比时第一项是相对于容器宽度，第二项是相对于容器高度。
radius:[0, '75%'],          //饼图的半径，数组的第一项是内半径，第二项是外半径。支持设置成百分比，相对于容器高宽中较小的一项的一半。可以将内半径设大显示成圆环图（Donut chart）。
silent:false,               //图形是否不响应和触发鼠标事件，默认为 false，即响应和触发鼠标事件。
name:"数据名称",            //系列名称，用于tooltip的显示，legend 的图例筛选，在 setOption 更新数据和配置项时用于指定对应的系列。
legendHoverLink:true,       //是否启用图例 hover 时的联动高亮。
hoverAnimation:true,        //是否开启 hover 在扇区上的放大动画效果。
selectedMode:false,         //选中模式，表示是否支持多个选中，默认关闭，支持布尔值和字符串，字符串取值可选'single'，'multiple'，分别表示单选还是多选。
selectedOffset:10,          //选中扇区的偏移距离。
clockwise:true,             //饼图的扇区是否是顺时针排布。
startAngle:90,              //起始角度，支持范围[0, 360]。
minAngle:0,                 //最小的扇区角度（0 ~ 360），用于防止某个值过小导致扇区太小影响交互。
roseType:false,             //是否展示成南丁格尔图，通过半径区分数据大小。可选择两种模式：'radius' 扇区圆心角展现数据的百分比，半径展现数据的大小。'area' 所有扇区圆心角相同，仅通过半径展现数据大小。
cursor:"pointer",           //鼠标悬浮时在图形元素上时鼠标的样式是什么。同 CSS 的 cursor。
label:{                      //图形上的文本标签，可用于说明图形的一些数据信息，比如值，名称等，
normal:mylabel,
emphasis:mylabel
},
itemStyle:{                  //图形样式，normal 是图形在默认状态下的样式；emphasis 是图形在高亮状态下的样式，比如在鼠标悬浮或者图例联动高亮时。
normal:myitemStyle,
emphasis:myitemStyle,
},
data:[
{name: '数据1', value: 10},
{name: '数据2', value: 20}
],
//markPoint:同bar
//markLine:同bar
//markArea:同bar
tooltip:tooltip  //index,js
},

];
*/
